package com.xunyin.modules.mtorder.service;

import com.xunyin.common.service.BaseService;
import com.xunyin.modules.mtcart.domain.MtCart;
import com.xunyin.modules.mtorder.domain.MtOrder;
import com.xunyin.modules.mtorder.service.dto.OrderDto;
import com.xunyin.modules.user.service.dto.UserOrderDto;
import com.xunyin.modules.wechatshop.param.OrderListParam;
import com.xunyin.web.ResponseObject;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 订单业务接口
 * <p>
 * Created by xunyinyunshang <3594419785@qq.com>
 * CopyRight 讯音云商 https://www.tonetn.com
 */
public interface MtOrderService extends BaseService<MtOrder> {

    /**
     * 获取用户的订单
     *
     * @param paramMap
     */
    ResponseObject getUserOrderList(OrderListParam orderListParam);

    /**
     * 创建订单
     *
     * @param reqDto
     */
    MtOrder saveOrder(OrderDto reqDto);

    /**
     * 获取订单详情
     *
     * @param id
     */
    MtOrder getOrderInfo(Integer id);

    /**
     * 根据ID获取订单
     *
     * @param id
     */
    UserOrderDto getOrderById(Integer id);

    /**
     * 根据ID获取订单
     *
     * @param id
     */
    UserOrderDto getMyOrderById(Integer id);

    /**
     * 取消订单
     *
     * @param id 订单ID
     * @return
     */
    MtOrder cancelOrder(Integer id, String remark);

    /**
     * 根据订单ID删除
     *
     * @param id       ID
     * @param operator 操作人
     */
    void deleteOrder(Integer id, String operator);

    /**
     * 根据订单号获取订单
     *
     * @param orderSn
     */
    UserOrderDto getOrderByOrderSn(String orderSn);

    /**
     * 更新订单
     *
     * @param reqDto
     */
    MtOrder updateOrder(OrderDto reqDto);

    /**
     * 更新订单
     *
     * @param mtOrder
     * @return
     */
    MtOrder updateOrder(MtOrder mtOrder);

    /**
     * 把订单置为已支付
     *
     * @param orderId
     * @return
     */
    Boolean setOrderPayed(Integer orderId, BigDecimal payAmount);

    /**
     * 根据条件搜索订单
     */
    List<MtOrder> getOrderListByParams(Map<String, Object> params);

    /**
     * 获取订单总数
     */
    BigDecimal getOrderCount(Integer storeId);

    /**
     * 获取订单数量
     */
    BigDecimal getOrderCount(Integer storeId, Date beginTime, Date endTime);

    /**
     * 计算购物车
     * */
    Map<String, Object> calculateCartGoods(Integer userId, List<MtCart> cartList, Integer couponId, boolean isUsePoint, String platform, Integer storeId);

    /**
     * 获取支付金额
     */
    BigDecimal getPayMoney(Integer storeId, Date beginTime, Date endTime);

    /**
     * 获取支付人数
     */
    Integer getPayUserCount(Integer storeId);

    /**
     * 获取支付金额
     */
    BigDecimal getPayMoney(Integer storeId);


}
